home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / gui / vcard / vcardgui.pyo (.txt) < prev   
Python Compiled Bytecode  |  2008-10-13  |  18KB  |  569 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from util.primitives import Storage
  5. from util import do
  6. import gettext
  7. gettext.install('digsby')
  8. from gui.controls import *
  9. import jabber
  10. import wx
  11.  
  12. class Holder(object):
  13.     pass
  14.  
  15.  
  16. class vcardcontrols(CustomControls):
  17.     
  18.     class _VCardOrg(Holder):
  19.         
  20.         def __init__(self, controls, parent):
  21.             self.parent = parent
  22.             self.controls = controls
  23.             (self.namelabel, self.nametext) = self.controls.LabeledTextInput(_('Name'))
  24.             (self.unitlabel, self.unittext) = self.controls.LabeledTextInput(_('Unit'))
  25.             self.elems = [
  26.                 self.namelabel,
  27.                 self.nametext,
  28.                 self.unitlabel,
  29.                 self.unittext]
  30.  
  31.         
  32.         def GetValue(self):
  33.             if (any,)((lambda .0: for attr in .0:
  34. getattr(self, attr + 'text').Value)([
  35.                 'name',
  36.                 'unit'])):
  37.                 org = jabber.vcard.VCardOrg('ORG', '')
  38.                 for attr in [
  39.                     'name',
  40.                     'unit']:
  41.                     val = getattr(self, attr + 'text').Value
  42.                     if val:
  43.                         setattr(org, attr, val)
  44.                         continue
  45.                 
  46.                 return org
  47.             else:
  48.                 return None
  49.  
  50.         
  51.         def SetValue(self, org):
  52.             for attr in [
  53.                 'name',
  54.                 'unit']:
  55.                 if not getattr(org, attr):
  56.                     pass
  57.                 getattr(self, attr + 'text').Value = ''
  58.             
  59.  
  60.         
  61.         def clear(self):
  62.             for attr in [
  63.                 'name',
  64.                 'unit']:
  65.                 getattr(self, attr + 'text').Value = ''
  66.             
  67.  
  68.         Value = property(GetValue, SetValue)
  69.  
  70.     
  71.     def VCardOrg(self):
  72.         return self._VCardOrg(self, self.parent)
  73.  
  74.     
  75.     class _VCardName(Holder):
  76.         
  77.         def __init__(self, controls, parent):
  78.             self.parent = parent
  79.             self.controls = controls
  80.             l = self.controls.LabeledTextInput
  81.             d = dict(family = (_('Last Name'),), given = (_('First Name'),), middle = (_('Middle Name'),), prefix = (_('Prefix'),), suffix = (_('Suffix'),))
  82.             self.elems = []
  83.             for i in d.iteritems():
  84.                 (one, two) = l(*i[1])
  85.                 self.elems.append(one)
  86.                 self.elems.append(two)
  87.                 setattr(self, i[0] + 'label', one)
  88.                 setattr(self, i[0] + 'text', two)
  89.             
  90.  
  91.         
  92.         def GetValue(self):
  93.             name = jabber.vcard.VCardName('N', '')
  94.             for attr in [
  95.                 'family',
  96.                 'given',
  97.                 'middle',
  98.                 'prefix',
  99.                 'suffix']:
  100.                 setattr(name, attr, getattr(self, attr + 'text').Value)
  101.             
  102.             return name
  103.  
  104.         
  105.         def SetValue(self, name):
  106.             for attr in [
  107.                 'family',
  108.                 'given',
  109.                 'middle',
  110.                 'prefix',
  111.                 'suffix']:
  112.                 getattr(self, attr + 'text').Value = getattr(name, attr)
  113.             
  114.  
  115.         Value = property(GetValue, SetValue)
  116.  
  117.     
  118.     def VCardName(self):
  119.         return self._VCardName(self, self.parent)
  120.  
  121.     
  122.     class _VCardString(object):
  123.         _class = jabber.vcard.VCardString
  124.         
  125.         def __init__(self, controls, parent, type_, label):
  126.             self.parent = parent
  127.             self.controls = controls
  128.             self.type_ = type_
  129.             if label is not None:
  130.                 l = self.controls.LabeledTextInput
  131.                 (self.stringlabel, self.stringtext) = l(label)
  132.                 self.elems = [
  133.                     self.stringlabel,
  134.                     self.stringtext]
  135.             else:
  136.                 self.stringtext = self.controls.TextInput()
  137.                 self.elems = [
  138.                     self.stringtext]
  139.  
  140.         
  141.         def GetValue(self):
  142.             
  143.             try:
  144.                 strng = self._class(self.type_, self.stringtext.Value)
  145.                 return strng
  146.             except:
  147.                 return None
  148.  
  149.  
  150.         
  151.         def SetValue(self, strng):
  152.             self.stringtext.Value = strng.value
  153.  
  154.         
  155.         def clear(self):
  156.             self.stringtext.Value = ''
  157.  
  158.         Value = property(GetValue, SetValue)
  159.  
  160.     
  161.     class _VCardXString(_VCardString):
  162.         _class = jabber.vcard.VCardXString
  163.  
  164.     
  165.     def VCardString(self, type_, label):
  166.         return self._VCardString(self, self.parent, type_, label)
  167.  
  168.     
  169.     def VCardXString(self, type_, label):
  170.         return self._VCardXString(self, self.parent, type_, label)
  171.  
  172.     
  173.     class _VCardTel(Holder):
  174.         
  175.         def __init__(self, controls, parent):
  176.             self.parent = parent
  177.             self.controls = controls
  178.             (self.numberlabel, self.numbertext) = self.controls.LabeledTextInput(_('Number'))
  179.             self.type = Storage()
  180.             self.type.Value = []
  181.             self.elems = [
  182.                 self.numberlabel,
  183.                 self.numbertext]
  184.  
  185.         
  186.         def GetValue(self):
  187.             if getattr(self, 'numbertext').Value:
  188.                 tel = jabber.vcard.VCardTel('TEL', '')
  189.                 val = getattr(self, 'numbertext').Value
  190.                 tel.number = val
  191.                 if self.type.Value:
  192.                     tel.type = self.type.Value[:]
  193.                 
  194.                 return tel
  195.             else:
  196.                 return None
  197.  
  198.         
  199.         def SetValue(self, tel):
  200.             self.type.Value = tel.type[:]
  201.             self.numbertext.Value = tel.number
  202.  
  203.         
  204.         def clear(self):
  205.             self.type.Value = []
  206.             self.numbertext.Value = ''
  207.  
  208.         Value = property(GetValue, SetValue)
  209.  
  210.     
  211.     def VCardTel(self):
  212.         return self._VCardTel(self, self.parent)
  213.  
  214.     
  215.     class _VCardEmail(Holder):
  216.         
  217.         def __init__(self, controls, parent):
  218.             self.parent = parent
  219.             self.controls = controls
  220.             (self.addresslabel, self.addresstext) = self.controls.LabeledTextInput(_('Email'))
  221.             self.type = Storage()
  222.             self.type.Value = []
  223.             self.elems = [
  224.                 self.addresslabel,
  225.                 self.addresstext]
  226.  
  227.         
  228.         def GetValue(self):
  229.             if getattr(self, 'addresstext').Value:
  230.                 email = jabber.vcard.VCardEmail('EMAIL', '')
  231.                 val = getattr(self, 'addresstext').Value
  232.                 email.address = val
  233.                 if self.type.Value:
  234.                     email.type = self.type.Value[:]
  235.                 
  236.                 return email
  237.             else:
  238.                 return None
  239.  
  240.         
  241.         def SetValue(self, email):
  242.             self.type.Value = email.type[:]
  243.             self.addresstext.Value = email.address
  244.  
  245.         
  246.         def clear(self):
  247.             self.type.Value = []
  248.             self.addresstext.Value = ''
  249.  
  250.         Value = property(GetValue, SetValue)
  251.  
  252.     
  253.     def VCardEmail(self):
  254.         return self._VCardEmail(self, self.parent)
  255.  
  256.     
  257.     class _VCardAdr(Holder):
  258.         
  259.         def __init__(self, controls, parent):
  260.             self.parent = parent
  261.             self.controls = controls
  262.             l = self.controls.LabeledTextInput
  263.             self.poboxtext = Storage()
  264.             self.poboxtext.Value = ''
  265.             common_ = ('H',)
  266.             d = [
  267.                 ('street', _('Street')),
  268.                 ('extadr', ''),
  269.                 ('locality', _('City')),
  270.                 ('region', _('State')),
  271.                 ('pcode', _('Postal Code')),
  272.                 ('ctry', _('Country'))]
  273.             self.elems = []
  274.             for i in d:
  275.                 (one, two) = l(i[1])
  276.                 self.elems.append(one)
  277.                 self.elems.append(two)
  278.                 setattr(self, i[0] + 'label', one)
  279.                 setattr(self, i[0] + 'text', two)
  280.             
  281.  
  282.         
  283.         def GetValue(self):
  284.             if (any,)((lambda .0: for attr in .0:
  285. getattr(self, attr + 'text').Value)([
  286.                 'street',
  287.                 'extadr',
  288.                 'pobox',
  289.                 'locality',
  290.                 'region',
  291.                 'pcode',
  292.                 'ctry'])):
  293.                 adr = jabber.vcard.VCardAdr('ADR', '')
  294.                 for attr in [
  295.                     'street',
  296.                     'extadr',
  297.                     'pobox',
  298.                     'locality',
  299.                     'region',
  300.                     'pcode',
  301.                     'ctry']:
  302.                     val = getattr(self, attr + 'text').Value
  303.                     if val:
  304.                         setattr(adr, attr, val)
  305.                         continue
  306.                 
  307.                 return adr
  308.             else:
  309.                 return None
  310.  
  311.         
  312.         def SetValue(self, adr):
  313.             for attr in [
  314.                 'street',
  315.                 'extadr',
  316.                 'pobox',
  317.                 'locality',
  318.                 'region',
  319.                 'pcode',
  320.                 'ctry']:
  321.                 if not getattr(adr, attr):
  322.                     pass
  323.                 getattr(self, attr + 'text').Value = ''
  324.             
  325.  
  326.         
  327.         def clear(self):
  328.             for attr in [
  329.                 'street',
  330.                 'extadr',
  331.                 'pobox',
  332.                 'locality',
  333.                 'region',
  334.                 'pcode',
  335.                 'ctry']:
  336.                 getattr(self, attr + 'text').Value = ''
  337.             
  338.  
  339.         Value = property(GetValue, SetValue)
  340.  
  341.     
  342.     def VCardAdr(self):
  343.         return self._VCardAdr(self, self.parent)
  344.  
  345.  
  346.  
  347. class VCardGUI(dict):
  348.     components = {
  349.         'FN': 'VCardString',
  350.         'N': 'store',
  351.         'NICKNAME': 'VCardString',
  352.         'PHOTO': 'store',
  353.         'BDAY': 'VCardString',
  354.         'ADR': 'VCardAdr',
  355.         'LABEL': 'store',
  356.         'TEL': 'VCardTel',
  357.         'EMAIL': 'VCardEmail',
  358.         'JABBERID': 'store',
  359.         'MAILER': 'store',
  360.         'TZ': 'store',
  361.         'GEO': 'store',
  362.         'TITLE': 'VCardString',
  363.         'ROLE': 'VCardString',
  364.         'LOGO': 'store',
  365.         'ORG': 'VCardOrg',
  366.         'CATEGORIES': 'store',
  367.         'NOTE': 'store',
  368.         'PRODID': 'store',
  369.         'REV': 'store',
  370.         'SORT-STRING': 'store',
  371.         'SOUND': 'store',
  372.         'UID': 'store',
  373.         'URL': 'VCardString',
  374.         'CLASS': 'store',
  375.         'KEY': 'store',
  376.         'DESC': 'VCardXString' }
  377.     
  378.     def __init__(self, protocol = None, vcard = None):
  379.         dict.__init__(self)
  380.         self.protocol = protocol
  381.         vc = None if vcard is not None else self.protocol.vcard
  382.         self.init_gui()
  383.         self.page1()
  384.         self.page2()
  385.         self.page3()
  386.         self.page4()
  387.         self.assign_vc(vc)
  388.         f = self.frame
  389.         f.Fit()
  390.         f.MinSize = wx.Size(f.Size.x * 1.5, f.Size.y)
  391.         f.Fit()
  392.         skin = skin
  393.         import gui
  394.         if protocol is None:
  395.             f.SetFrameIcon(skin.get('AppDefaults.TaskbarIcon'))
  396.         else:
  397.             f.SetFrameIcon(protocol.serviceicon)
  398.         wx.CallAfter(f.Show)
  399.  
  400.     
  401.     def init_gui(self):
  402.         name = None if self.protocol is not None else 'vCard Viewer'
  403.         title = None if self.protocol is not None else _('vCard Viewer')
  404.         self.frame = f = wx.Frame(None, -1, title = title, name = name)
  405.         self.notebook = wx.Notebook(f, -1)
  406.         if self.protocol is not None:
  407.             f.Sizer = s = wx.BoxSizer(wx.VERTICAL)
  408.             s.Add(self.notebook, 1, wx.EXPAND)
  409.             p = wx.Panel(f)
  410.             save = wx.Button(p, wx.ID_SAVE, 'Save')
  411.             retrieve = Button(p, _('Retreive'), self.on_retrieve)
  412.             cancel = wx.Button(p, wx.ID_CANCEL, 'Cancel')
  413.             save.Bind((wx.EVT_BUTTON,), (lambda e: self.on_save()))
  414.             p.Sizer = h = wx.BoxSizer(wx.HORIZONTAL)
  415.             h.AddStretchSpacer(1)
  416.             (do,)((lambda .0: for b in .0:
  417. h.Add(b, 0, wx.EXPAND | wx.ALL, 3))([
  418.                 save,
  419.                 retrieve,
  420.                 cancel]))
  421.             s.Add(p, 0, wx.EXPAND)
  422.         
  423.  
  424.     
  425.     def on_save(self):
  426.         print 'onsave'
  427.         self.protocol.save_vcard(self.retrieve_vcard())
  428.  
  429.     
  430.     def on_retrieve(self):
  431.         self.protocol.request_vcard('', success = self.handle_vc_stanza)
  432.  
  433.     
  434.     def handle_vc_stanza(self, stanza):
  435.         q = stanza.get_query()
  436.         if not q:
  437.             return None
  438.         
  439.         self.assign_vc(jabber.VCard(q))
  440.  
  441.     
  442.     def assign_vc(self, vc):
  443.         for k, v in self.components.items():
  444.             if v == 'store':
  445.                 self[k] = vc[k]
  446.                 continue
  447.         
  448.         self.assign_page1(vc)
  449.         self.assign_page2(vc)
  450.         self.assign_page3(vc)
  451.         self.assign_page4(vc)
  452.  
  453.     
  454.     def assign_lists(self, names, vc):
  455.         for name in names:
  456.             self['_' + name] = vc[name][1:]
  457.             if vc[name]:
  458.                 self[name].Value = vc[name][0]
  459.                 continue
  460.             self[name].clear()
  461.         
  462.  
  463.     
  464.     def retrieve_lists(self, names, vc):
  465.         for name in names:
  466.             if self[name].Value:
  467.                 vc.content[name] = [
  468.                     self[name].Value]
  469.             
  470.             vc.content[name][1:] = self['_' + name]
  471.         
  472.  
  473.     
  474.     def assign_page1(self, vc):
  475.         if vc['FN'] is not None:
  476.             self['FN'].Value = vc['FN']
  477.         else:
  478.             self['FN'].clear()
  479.         self.assign_lists(('NICKNAME', 'BDAY', 'TEL', 'URL', 'EMAIL'), vc)
  480.  
  481.     
  482.     def page1(self):
  483.         p = wx.Panel(self.notebook)
  484.         self.notebook.AddPage(p, _('General'))
  485.         c = vcardcontrols(p)
  486.         vcs = c.VCardString
  487.         self['FN'] = vcs('FN', _('Full Name'))
  488.         self['NICKNAME'] = vcs('NICKNAME', _('Nickname'))
  489.         self['BDAY'] = vcs('BDAY', _('Birthday'))
  490.         self['TEL'] = c.VCardTel()
  491.         self['URL'] = vcs('URL', _('Homepage'))
  492.         self['EMAIL'] = c.VCardEmail()
  493.         s = FGridSizer(0, 2, *sum([
  494.             self['FN'].elems,
  495.             self['NICKNAME'].elems,
  496.             self['BDAY'].elems,
  497.             self['TEL'].elems,
  498.             self['URL'].elems,
  499.             self['EMAIL'].elems], []))
  500.         s.AddGrowableCol(1)
  501.         p.Sizer = s
  502.  
  503.     
  504.     def assign_page2(self, vc):
  505.         self.assign_lists(('ORG', 'TITLE', 'ROLE'), vc)
  506.  
  507.     
  508.     def page2(self):
  509.         p = wx.Panel(self.notebook)
  510.         self.notebook.AddPage(p, _('Work'))
  511.         c = vcardcontrols(p)
  512.         vcs = c.VCardString
  513.         self['ORG'] = c.VCardOrg()
  514.         self['TITLE'] = vcs('TITLE', _('Position'))
  515.         self['ROLE'] = vcs('ROLE', _('Role'))
  516.         s = FGridSizer(0, 2, *sum([
  517.             self['ORG'].elems,
  518.             self['TITLE'].elems,
  519.             self['ROLE'].elems], []))
  520.         s.AddGrowableCol(1)
  521.         p.Sizer = s
  522.  
  523.     
  524.     def assign_page3(self, vc):
  525.         self.assign_lists(('ADR',), vc)
  526.  
  527.     
  528.     def page3(self):
  529.         p = wx.Panel(self.notebook)
  530.         self.notebook.AddPage(p, _('Location'))
  531.         c = vcardcontrols(p)
  532.         self['ADR'] = c.VCardAdr()
  533.         s = FGridSizer(0, 2, *self['ADR'].elems)
  534.         s.AddGrowableCol(1)
  535.         p.Sizer = s
  536.  
  537.     
  538.     def assign_page4(self, vc):
  539.         self.assign_lists(('DESC',), vc)
  540.  
  541.     
  542.     def page4(self):
  543.         p = wx.Panel(self.notebook)
  544.         self.notebook.AddPage(p, _('About'))
  545.         c = vcardcontrols(p)
  546.         self['DESC'] = c.VCardXString('DESC', None)
  547.         s = FGridSizer(0, 1, self['DESC'].stringtext)
  548.         s.AddGrowableCol(0)
  549.         s.AddGrowableRow(0)
  550.         p.Sizer = s
  551.  
  552.     
  553.     def retrieve_vcard(self):
  554.         vc = jabber.vcard.VCard('')
  555.         for k, v in self.components.items():
  556.             if v == 'store':
  557.                 vc.content[k] = self[k]
  558.                 continue
  559.         
  560.         vc.content['FN'] = self['FN'].Value
  561.         self.retrieve_lists(('NICKNAME', 'BDAY', 'TEL', 'URL', 'EMAIL', 'ORG', 'TITLE', 'ROLE', 'ADR', 'DESC'), vc)
  562.         return vc
  563.  
  564.     
  565.     def Prompt(self, callback):
  566.         return True
  567.  
  568.  
  569.